package com.xwj.seckill.service;

import com.xwj.common.dto.BaseResponse;
import com.xwj.seckill.dto.BookRobDto;

/**
 * @author xwj
 * @date 2020/5/6
 */
public interface BookRobService {
    /**
     * 书籍抢购，无锁
     * @param dto
     * @return
     */
    BaseResponse robWithNoLock(BookRobDto dto);

    /**
     * 书籍抢购，zookeeper分布式锁
     * @param dto
     * @return
     */
    BaseResponse robWithZookeeperLock(BookRobDto dto);

    /**
     * 书籍抢购，redis原子操作分布式锁，会发生超卖现象
     * @param dto
     * @return
     */
    BaseResponse robWithRedisLock(BookRobDto dto);

    /**
     * 书籍抢购，redis原子操作分布式锁+aop
     * @param dto
     * @return
     */
    BaseResponse robWithAopRedisLock(BookRobDto dto);

    /**
     * 书籍抢购，zookeeper分布式锁+aop
     * @param dto
     * @return
     */
    BaseResponse robWithAopZkLock(BookRobDto dto);

    /**
     * 书籍抢购，redisson分布式可重入锁
     * @param dto
     * @return
     */
    BaseResponse robWithRedissonLock(BookRobDto dto);

    /**
     * 书籍抢购，redlock锁
     * @param dto
     * @return
     */
    BaseResponse robWithRedLock(BookRobDto dto);
}
